#pragma once

#include <iostream>
#include <functional>
#include <unistd.h>
#include <ctime>
#include <vector>
void Download()
{
    std::cout << getpid() << "：正在下载" << std::endl;
}

void PrintLog()
{
    std::cout << getpid() << "：打印日志" << std::endl;
}

void PushVideoStream()
{
    std::cout << getpid() << ": 推送视频流" << std::endl;
}

typedef std::function<void()> task_t; //function什么东西 ，包装器？？
struct Init
{
    const static int g_download_code = 0;
    const static int g_printlog_code = 1;
    const static int g_pushvideostream = 2;
    std::vector<task_t> tasks;            // 这个不能用static原因

    Init()
    {
        tasks.push_back(Download);
        tasks.push_back(PrintLog);
        tasks.push_back(PushVideoStream);
        srand(time(nullptr) ^ getpid());  //这个不是很懂
    }
    //检查code 符合要求，
    bool CheckCode(int code)
    {
        if(code >=0 && code < tasks.size())
            return true;
        else return false;
    }
    //随机选一个task
    int SelectTask()
    {
        return rand() % tasks.size();
    }
    //掉用code对应的task
    void RunTask(int code)
    {
        return tasks[code]();   //我觉得可以把CheckCode 封装在这里面
    }
    
};                              ///这里要有;★~！！！！
Init init;